"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Book1 = exports.Box2 = exports.Box = exports.home = exports.zoo = exports.b = exports.a = void 0;
// 1.全局模块
// 在默认情况下，当你开始在一个新的 TypeScript 文件中写下代码时，它处于全局命名空间中
var foo = 123;
// 2.文件模块
// 文件模块 = 外部模块
// 如果在 TypeScript 文件的根级别位置含有 import 或者 export，那么它会在这个文件中创建一个本地的作用域
// 优点：侧重于代码和复用，不是在全局作用域里
exports.a = 1;
exports.b = 2;
exports.default = 'ikki';
// 3. 模块规范
// AMD：不要使用它，它仅能在浏览器工作；
// SystemJS：这是一个好的实验，已经被 ES 模块替代；
// ES 模块：它并没有准备好。
// 使用 module: commonjs 选项来替代这些模式，将会是一个好的主意
// 4.命名空间
// 在代码量较大的情况下，为了避免命名空间冲突，可以将相似的函数、类、接口放置到命名空间内
// 命名空间可以将代码包裹起来，只对外暴露需要在外部访问的对象，命名空间内通过export向外导出
// 命名空间是内部模块，主要用于组织代码，避免命名冲突
var zoo;
(function (zoo) {
    var Dog = /** @class */ (function () {
        function Dog() {
        }
        Dog.prototype.eat = function () { console.log('zoo dog'); };
        return Dog;
    }());
    zoo.Dog = Dog;
})(zoo = exports.zoo || (exports.zoo = {}));
var home;
(function (home) {
    var Dog = /** @class */ (function () {
        function Dog() {
        }
        Dog.prototype.eat = function () { console.log('home dog'); };
        return Dog;
    }());
    home.Dog = Dog;
})(home = exports.home || (exports.home = {}));
var dog_of_zoo = new zoo.Dog();
dog_of_zoo.eat();
var dog_of_home = new home.Dog();
dog_of_home.eat();
// 总结命名空间中进行类型扩展，里面必须加入export 后面可以跟类或者普通类型
var Numbers;
(function (Numbers) {
    Numbers.arr = [1];
})(Numbers || (Numbers = {}));
// 5.文件，模块与命名空间
// 5.1文件和模块
var Box;
(function (Box) {
    var Book1 = /** @class */ (function () {
        function Book1() {
        }
        return Book1;
    }());
    Box.Book1 = Book1;
})(Box = exports.Box || (exports.Box = {}));
// ===>编译后
// var Box;
// (function (Box) {
//     var Book1 = /** @class */ (function () {
//         function Book1() {
//         }
//         return Book1;
//     }());
//     Box.Book1 = Book1;
// })(Box = exports.Box || (exports.Box = {}));
// 5.2 空间
// namespace 和 module 不一样，namespace 在全局空间中具有唯一性
var Box2;
(function (Box2) {
    var Book1 = /** @class */ (function () {
        function Book1() {
        }
        return Book1;
    }());
    Box2.Book1 = Book1;
})(Box2 = exports.Box2 || (exports.Box2 = {}));
// ===>编译后
// var Box2;
// (function (Box2) {
//     var Book1 = /** @class */ (function () {
//         function Book1() {
//         }
//         return Book1;
//     }());
//     Box2.Book1 = Book1;
// })(Box2 || (Box2 = {}));
// 5.3文件
// 每个文件是独立的
var Book1 = /** @class */ (function () {
    function Book1() {
    }
    return Book1;
}());
exports.Book1 = Book1;
// ===>编译后
// var Book1 = /** @class */ (function () {
//     function Book1() {
//     }
//     return Book1;
// }());
// exports.Book1 = Book1;
